package fr.syntheses.blog.Model.Mapping;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

import org.apache.log4j.Logger;

import fr.syntheses.blog.Service.Log.LogSupport;
import fr.syntheses.blog.beans.Categorie;
import fr.syntheses.blog.beans.Utilisateur;
import fr.syntheses.blog.beans.Article;

/**
 * @author <h1> Yesim </h1>
 * ORM Class
 * blogyesim
 * 16 oct. 2012
 */
public class Mapper extends LogSupport {
	
	Logger log = Logger.getLogger(currentClassToLog);
	
	 public Utilisateur mapperUtilisateur(ResultSet resultat)
	 
	    {
	    	// Variables
	    	Utilisateur utilisateur=new Utilisateur();
	    	
	    	try 
	    	{	
		    	if (resultat.getString("utilisateur.id")==null)
		    	{
		    		utilisateur.setId(0);
		    	}
		    	else 
		    	{
		    		utilisateur.setId(resultat.getInt("utilisateur.id"));		
		    	}
		    	
		    	

		    	if (resultat.getString("utilisateur.nom") == null) {
		    		utilisateur.setNom("");		
		    	} else {
		    		utilisateur.setNom(resultat.getString("utilisateur.Nom"));	
		    	}
		    	
		    	if (resultat.getString("utilisateur.prenom") == null) {
		    		utilisateur.setPrenom("");
		    	} else {
		    		utilisateur.setPrenom(resultat.getString("utilisateur.prenom"));
		    	}	
		    	
		    	if (resultat.getString("utilisateur.email") == null) {
		    		utilisateur.setEmail("");
		    	} else {
		    		utilisateur.setEmail(resultat.getString("utilisateur.email"));
		    	}
		    	
		    	if (resultat.getString("utilisateur.login") == null) {
		    		utilisateur.setLogin("");
		    	} else {
		    		utilisateur.setLogin(resultat.getString("utilisateur.login"));
		    	}

		    	if (resultat.getString("utilisateur.motdepasse") == null) {
		    		utilisateur.setMotdepasse("");
		    	} else {
		    		utilisateur.setMotdepasse(resultat.getString("utilisateur.motdepasse"));
		    	}

		    	if (resultat.getString("utilisateur.role") == null) {
		    		utilisateur.setRole(0);
		    	} else {
		    		utilisateur.setRole(resultat.getInt("utilisateur.role"));
		    	}

	    	} catch (Exception e) {
	        	//Si il y a une erreur durant le mapping des attributs
	        	utilisateur = null;
		    	log.error("Erreur lors du mapping des attributs " 
		    			+ " d'un utilisateur dans la class UtilisateurDAO" 
		    			+ ", fonction mapperUtilisateur"  + e);
	        }
	        
	        //On retourne le client
	        return utilisateur;
	    }

	 public Categorie mapperCategorie(ResultSet resultat)
	 
	    {
	    	// Variables
	    	Categorie categorie=new Categorie();
	    	
	    	try 
	    	{	
		    	if (resultat.getString("categorie.id")==null)
		    	{
		    		categorie.setId(0);
		    	}
		    	else 
		    	{
		    		categorie.setId(resultat.getInt("categorie.id"));		
		    	}
		    	
		    	

		    	if (resultat.getString("categorie.categorie") == null) {
		    		categorie.setCategorie("");		
		    	} else {
		    		categorie.setCategorie(resultat.getString("categorie.categorie"));	
		    	}
		    	

	    	} catch (Exception e) {
	        	//Si il y a une erreur durant le mapping des attributs
	    		categorie = null;
		    	log.error("Erreur lors du mapping des attributs " 
		    			+ " d'un utilisateur dans la class CategorieDAO" 
		    			+ ", fonction mapperCategorie"  + e);
	        }
	        
	        //On retourne le categorie
	        return categorie;
	    }

	 public Article mapperArticle(ResultSet resultat)
	 
	    {
	    	// Variables
  		 Categorie categorie=new Categorie();
		 Utilisateur auteur=new Utilisateur();
		 Article article=new Article();
		 
	    	
		 
//		 ResultSetMetaData rsMetaData = resultat.getMetaData();
//
//		    int numberOfColumns = rsMetaData.getColumnCount();
//		    System.out.println("resultSet MetaData column Count=" + numberOfColumns);
//
//		    for (int i = 1; i <= numberOfColumns; i++) {
//		      System.out.println("column MetaData ");
//		      System.out.println("column number " + i);
//		      // get the column's name.
//		      System.out.println(rsMetaData.getColumnName(i));
//
//		    }
		    
		    
	    	try 
	    	{	
	    		
	    		
		    	if (resultat.getString("article.Id")==null)
		    	{
		    		article.setId(0);
		    	}
		    	else 
		    	{
		    		article.setId(resultat.getInt("article.Id"));		
		    	}
		    	

		    	if (resultat.getString("article.Titre")==null)
		    	{
		    		article.setTitre("");		
		    	}
		    	else 
		    	{
		    		article.setTitre(resultat.getString("article.Titre"));	
		    	}

		    	if (resultat.getString("article.Contenu")==null)
		    	{
		    		article.setContenu("");
		    	}
		    	else 
		    	{
		    		article.setContenu(resultat.getString("article.Contenu"));
		    	}	
		    	
		    	if (resultat.getString("article.Datepublication")==null)
		    	{
		    		article.setDatepublication(null);
		    	}
		    	else 
		    	{
		    		article.setDatepublication(resultat.getTimestamp("article.Datepublication"));
		    	}	
		    	
		    	if (resultat.getString("article.nombreCommentaire")==null)
		    	{
		    		article.setNombreCommentaire(0);
		    	} else {
					article.setNombreCommentaire(resultat.getInt("article.nombreCommentaire"));
				}
		    	
				categorie=mapperCategorie(resultat);

		    	if (categorie.equals(null))
		    	{
		    		article.setCategorie(null);		
		    	}
		    	else 
		    	{
		    		article.setCategorie(categorie);	
		    	}
		    	
		    	auteur=mapperUtilisateur(resultat);
		    	
		    	if (auteur.equals(null))
		    	{
		    		article.setAuteur(null);		
		    	}
		    	else 
		    	{
		    		article.setAuteur(auteur);	
		    	}



	    	}
	        catch (Exception e)
	        {
	        	//Si il y a une erreur durant le mapping des attributs
	        	article = null;
		    	log.error("Erreur lors du mapping des attributs d'un article dans la class Article, fonction mapperUtilisateur"  + e);
	        }
	        
	        //On retourne le client
	        return article;
	    }

}
